package com.winhxd.b2c.product.dao;

import com.winhxd.b2c.common.domain.product.condition.ProductCondition;
import com.winhxd.b2c.common.domain.product.condition.ProductSpuListCondition;
import com.winhxd.b2c.common.domain.product.model.ProductSpu;
import com.winhxd.b2c.common.domain.product.vo.*;
import org.apache.ibatis.annotations.MapKey;
import org.apache.ibatis.annotations.Param;

import java.util.List;
import java.util.Map;

/**
 * 商品spu
 * @author cuipengbo
 * @date 2019/1/18　　
*/
public interface ProductSpuMapper {
    /**
     * 删除商品spu
     * @param id　　
     * @return int
     * @author cuipengbo
     * @date 2019/1/18　　
    */
    int deleteByPrimaryKey(Long id);

    /**
     * 添加商品spu
     * @param record　　
     * @return int
     * @author cuipengbo
     * @date 2019/1/18　　
     */
    int insert(ProductSpu record);

    /**
     * 添加商品spu
     * @param record　　
     * @return int
     * @author cuipengbo
     * @date 2019/1/18　　
     */
    int insertSelective(ProductSpu record);

    /**
     * 查询商品spu
     * @param id　　
     * @return ProductSpu
     * @author cuipengbo
     * @date 2019/1/18　　
     */
    ProductSpu selectByPrimaryKey(Long id);

    /**
     * 修改商品spu
     * @param record　　
     * @return int
     * @author cuipengbo
     * @date 2019/1/18　　
     */
    int updateByPrimaryKeySelective(ProductSpu record);

    /**
     * 根据条件修改商品spu
     * @param productSpu
     * @param ids
     * @return int
     * @author cuipengbo
     * @date 2019/1/18　　
     */
    int batchUpdateByPrimaryKeySelective(@Param("productSpu") ProductSpu productSpu, @Param("ids") List ids);

    /**
     * 修改商品spu
     * @param record　　
     * @return int
     * @author cuipengbo
     * @date 2019/1/18　　
     */
    int updateByPrimaryKey(ProductSpu record);

    /**
     * 根据条件查询商品spu
     * @param model　　
     * @return List<ProductSpu>
     * @author cuipengbo
     * @date 2019/1/18　　
     */
    List<ProductSpu> selectByModel(ProductSpu model);

    /**
     * 根据条件查询商品spu及商品分类信息
     * @param condition　　
     * @return List<ProductListWebVO>
     * @author cuipengbo
     * @date 2019/1/18　　
     */
    List<ProductListWebVO> selectByCondition(ProductCondition condition);

    /**
     * 根据价格方案ID,一级spu List集合查询相关信息
     * 使用方:收藏夹、
     * @param priceProgramId
     * @param spuIdList
     * @author lizhonghua
     * @return
     */
    @MapKey("spuId")
    Map<Long, ProductSpuSimpleVO> selectSimpleProductList(@Param("priceProgramId") Long priceProgramId,@Param("spuIdList") List<Long> spuIdList);

    /**
     * 查询商品及价格
     * @param spuId
     * @param priceProgramId
     * @author mahongliang
     * @return
     */
    ProductSpuDetailVO selectSpuInnerJoinPriceSpu(@Param("spuId") Long spuId,@Param("priceProgramId") Long priceProgramId);

    /**
     * 根据条件统计数量
     * @auther yuluyuan
     * @date 2019/1/13 14:02
     * @param condition
     * @return java.lang.Integer
     */
    Integer countByCondition(ProductCondition condition);

    /**
     *  商城组件用，product列表
     * @auther yuluyuan
     * @date 2019/1/14 17:02
     * @param condition
     * @return java.util.List<com.winhxd.b2c.common.domain.product.vo.ProductListForAssemblyWebVO>
     */
    List<ProductListForAssemblyWebVO> selectForAssemblyByCondition(ProductCondition condition);
}
